package com.ruoyi.common.DateRangeUtil;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class DateRangeUtil {
    /**
     * 获得这个月日期 上个月26号到本月25号
     * @param date 输入日期
     * @return 包含开始日期和结束日期的 Map 对象
     */
    public static Map<String, Object> getThisMonthRange(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date); // 将 Date 转换为 Calendar

        Map<String, Object> dateRangeMap = new HashMap<>();

        // 获取当前月份
        int currentMonth = calendar.get(Calendar.MONTH);
        // 获取当前年份
        int currentYear = calendar.get(Calendar.YEAR);

        // 获取今天号
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        int startYear = currentYear;
        int startMon = currentMonth;
        int endYear = currentYear;
        int endMon = currentMonth;

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        // 当前日是否小于等于25号
        if (day <= 25) {
            // 如果本月为1月，则开始月为上一年的12月
            if (currentMonth == 0) {
                startYear--;
                startMon = 11; // 12月
            }

            // 开始日期为本月的26号
            Calendar startDate = Calendar.getInstance();
            startDate.set(startYear, startMon-1, 26);
            dateRangeMap.put("beginReportDate", dateFormat.format(startDate.getTime()));

            // 结束日期为本月的25号
            Calendar endDate = Calendar.getInstance();
            endDate.set(endYear, endMon, 25);
            dateRangeMap.put("endReportDate", dateFormat.format(endDate.getTime()));
        } else {
            // 如果本月是12月，则结束月为明年的1月
            if (currentMonth == 11) {
                endYear++;
                endMon = 0; // 1月
            }

            // 开始日期为下个月的26号
            Calendar startDate = Calendar.getInstance();
            startDate.set(startYear, startMon, 26);
            dateRangeMap.put("beginReportDate", dateFormat.format(startDate.getTime()));

            // 结束日期为下个月的25号
            Calendar endDate = Calendar.getInstance();
            endDate.set(endYear, endMon, 25);
            dateRangeMap.put("endReportDate", dateFormat.format(endDate.getTime()));
        }

        return dateRangeMap;
    }

    public static void main(String[] args) {
        Date today = new Date(); // 获取当前日期
        Map<String, Object> dateRangeMap = getThisMonthRange(today); // 调用方法获取本月日期范围
        System.out.println("开始日期: " + dateRangeMap.get("beginReportDate")); // 输出开始日期
        System.out.println("结束日期: " + dateRangeMap.get("endReportDate")); // 输出结束日期
    }
}
